package com.fansl.koala.quickdev.module.users.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fansl.koala.quickdev.common.bean.PageBean;
import com.fansl.koala.quickdev.module.users.bean.dto.CustomUserPermissionDTO;
import com.fansl.koala.quickdev.module.users.entity.SysMenu;
import com.fansl.koala.quickdev.module.users.vo.SimpleTreeVo;
import com.fansl.koala.quickdev.module.users.vo.MenuTreeVo;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 菜单权限表 服务类
 * </p>
 *
 * @author fansl
 * @since 2020-03-20
 */
public interface ISysMenuService extends IService<SysMenu> {

    /**
     * 分页查询组织树形数据
     *
     * @param pageParam 分页参数
     * @param sysMenu   查询参数
     * @return 查询数据
     */
    PageBean<MenuTreeVo> pageTree(PageBean<MenuTreeVo> pageParam, SysMenu sysMenu);

    /**
     * 查询简单菜单树形列表
     *
     * @return 查询数据
     */
    List<SimpleTreeVo> listTree();

    /**
     * 获取所有权限
     * @return 查询数据
     */
    List<SimpleTreeVo> listPermissions();

    /**
     * 获取用户自定义菜单ID
     * @param userId 用户id
     * @param type 权限类型（1-加权限2-减权限）
     * @return 菜单ID
     */
    List<String> getUserMenuByType(Long userId, String type);

    /**
     * 自定义用户自定义权限
     * @param userId 用户id
     * @param param 自定义权限集合
     * @return TRUE/FALSE
     */
    boolean customUserPermission(Long userId, CustomUserPermissionDTO param);

    /**
     * 获取角色自定义菜单ID
     *
     * @param roleId 角色id
     * @return 菜单ID
     */
    List<String> getRoleMenuByRoleId(Integer roleId);

    /**
     * 自定义角色权限
     *
     * @param roleId 角色id
     * @param param  自定义权限集合
     * @return TRUE/FALSE
     */
    boolean customRolePermission(Integer roleId, Set<Integer> param);
}
